package exercises.leetcode;

/**
 * <a href="https://leetcode-cn.com/problems/rotate-array/">
 * 189. 旋转数组</a>
 *
 * <p>描述: 给定一个数组，将数组中的元素向右移动 k 个位置，其中 k 是非负数。
 *
 * @author or2
 * @date 2021年09月20日 时间: 19:05
 */
public class No189 {
    public void rotate(int[] nums, int k) {
        int length = nums.length;
        if (k > length) {
            k %= length;
        }
        for (int i = 0, temp; i < (length >> 1); i++) {
            temp = nums[i];
            nums[i] = nums[length - 1 - i];
            nums[length - 1 - i] = temp;
        }
        for (int i = 0, temp; i < k >> 1; i++) {
            temp = nums[i];
            nums[i] = nums[k - 1 - i];
            nums[k - 1 - i] = temp;
        }
        for (int i = k, temp; i < k + (length - k >> 1); i++) {
            temp = nums[i];
            nums[i] = nums[length - 1 - i + k];
            nums[length - 1 - i + k] = temp;
        }
    }
}
